package br.com.adimoveis.ui.imovel;

import java.util.ArrayList;
import java.util.List;

import br.com.adimoveis.dao.ImovelDao;
import br.com.adimoveis.model.Imovel;

public class ImovelModel implements IImovelModel {

	private List<Imovel> imoveis;

	private Imovel selectedImovel;
	
	private ImovelDao imovelDao;
	
	public Imovel[] getItems() {
		imoveis = imovelDao.getImoveis();
		return imoveis.toArray(new Imovel[imoveis.size()]);
	}
	
	public Imovel getSelectedItem() {
		return selectedImovel;
	}

	public void saveAll() {
		if(selectedImovel != null){
			imovelDao.save(selectedImovel);
		}
	}

	public void setSelectedItem(Imovel imovel) {
		this.selectedImovel = imovel;
	}
	
	public void addElement(Imovel imovel) {
		imovelDao.save(imovel);
	}

	public void excluirItem(Object imovel) {
		imovelDao.delete((Imovel) imovel);
	}

	public Imovel[] getItemsByText(String texto) {
		List<Imovel> resultado = new ArrayList<Imovel>();
		texto = texto.toUpperCase();
		for(Imovel imovel : getItems()){{
			if(imovel.getBairro() != null && imovel.getBairro().toString().toUpperCase().contains(texto)){
				resultado.add(imovel);
				continue;
			}else if(imovel.getEndereco() != null && imovel.getEndereco().toUpperCase().contains(texto)){
				resultado.add(imovel);
				continue;
			}else if(imovel.getObservacao() != null && imovel.getObservacao().toUpperCase().contains(texto)){
				resultado.add(imovel);
				continue;
			}else if(imovel.getAparencia() != null && imovel.getAparencia().toString().toUpperCase().contains(texto)){
				resultado.add(imovel);
				continue;
			}else if(imovel.getTipo() != null && imovel.getTipo().toString().toUpperCase().contains(texto)){
				resultado.add(imovel);
				continue;
			}else if(imovel.getCorretor() != null && imovel.getCorretor().toUpperCase().contains(texto)){
				resultado.add(imovel);
				continue;
			}
		}
		}
		return resultado.toArray(new Imovel[(resultado.size())]);
	}

	public boolean contains(Imovel selectedImovel) {
		for(Imovel imovel : getItems()){

			if(imovel == selectedImovel){
				return true;
			}
		}
		return false;
	}
	
	public boolean isEnderecoCadastradoAlemDoCorrente(String endereco) {
		for(Imovel imovel : imoveis){
			
			if(imovel.equals(getSelectedItem())){
				continue;
			}
			
			String enderecoImovel = imovel.getEndereco();
			enderecoImovel = enderecoImovel.replace(" ", "");
			String enderecoComp = endereco.replace(" ", "");

			if(enderecoComp.equalsIgnoreCase(enderecoImovel)){
				return true;
			}
		}
		return false;
	}
	public ImovelDao getImovelDao() {
		return imovelDao;
	}
	public void setImovelDao(ImovelDao imovelDao) {
		this.imovelDao = imovelDao;
	}
	public Object[] getAparenciaImovel() {
		return imovelDao.getAparencias().toArray();
	}
	public Object[] getBairros() {
		return imovelDao.getBairros().toArray();
	}
	public Object[] getTipoImoveis() {
		return imovelDao.getTipos().toArray();
	}
	
	
}
